﻿// ConsoleApplication4.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <locale.h>//没有这个则不能使用setlocale函数，不能使用LC_CTYPE

#pragma pack(2)//结构体对齐
struct BMPHead
{
	uint16_t bfType;  //0,1
	uint32_t bfSize;  //2-5
	uint16_t bfReserved1;//6-7
	uint16_t bfReserved2;//8-9
	uint32_t bfOffBits;//10-13
	uint32_t infolen;   /* image info length:                   14-17 */
	uint32_t width;     /* pixel width of bmp image:            18-21 */
	uint32_t height;    /* pixel height of bmp image:           22-25 */
	uint16_t bitplane; //26-27
	uint16_t bitppx;    /* bit number per pixel:                28-29 */
	uint32_t compress;  /* compress type:                       30-33 */
	uint32_t datasize;  /* image data size:                     34-37 */
	uint32_t hdpi;      /* horizontal DPI, pixel per meter:     38-41 */
	uint32_t vdpi;      /* vertical DPI, pixel per meter:       42-45 */
	uint32_t colorindex;                    /* color index number:                  46-49 */
	uint32_t keyindex;                /* important index:                     50-53 */
};

int main()
{
	setlocale(LC_CTYPE, "en_US.UTF-8");

	FILE* f = fopen("1.bmp", "r");
	BMPHead head;
	fread(&head, 54, 1, f);
	if (head.bitppx == 8)
	{
		printf(u8"仅支持8bit格式，正确\n");
	}
	else
	{
		printf(u8"仅支持8bit格式，不正确\n");
		return 1;
	}
	fseek(f, head.bfOffBits, 0);
	uint8_t* pixels = new uint8_t[head.width * head.height];
	fread(pixels, head.width * head.height, 1, f);
	fclose(f);

	for (int y = 0; y < head.height; y++)
	{
		for (int x = 0; x < head.width; x++)
		{

			uint8_t c = (uint8_t)pixels[(head.height - 1 - y) * head.width + x];
			if (c > 240)
				printf(" ");
			else if (c > 64)
				printf(".");
			else
				printf("*");
		}
		printf("\n");
	}
	printf(u8"皮卡皮卡\n");

}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件，或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来，若要再次打开此项目，请转到“文件”>“打开”>“项目”并选择 .sln 文件
